/*
 * Controller.h
 *
 *  Created on: Dec 26, 2011
 *      Author: rudi
 */

#ifndef CONTROLLER_H_
#define CONTROLLER_H_

class wxPoint;
class wxBitmap;

/**
 * Base interface for every kind of controller
 *
 * @see IDrawController
 * @see IGameController
 * @see IGameStateController
 * @author Rudolf Heszele heszele@gmail.com
 * @version 1.0
 * @since 2012-03-08
 */
class IController
{
	public:
		/**
		 * No much meaning for the constructor, but a default one is needed even for an "interface"
		 */
		IController();
		/**
		 * The destructor is created to make it virtual
		 */
		virtual ~IController();
		/**
		 * This method is supposed to handle the event, when the left mouse button is pressed down
		 *
		 * @param wxPoint The position of the mouse when the button is pressed
		 */
		virtual void handleMouseDown(const wxPoint&) = 0;
		/**
		 * This method is supposed to handle the event, when the left mouse button is released
		 *
		 * @param wxPoint The position of the mouse when the button is pressed
		 */
		virtual void handleMouseUp(const wxPoint&) = 0;
		/**
		 * This method is supposed to handle the event, when the left mouse is moved
		 *
		 * @param wxPoint The new position of the mouse
		 * @return true is the internal state of the object has been changed, false otherwise
		 */
		virtual bool handleMouseMotion(const wxPoint&) = 0;
		/**
		 * This method is used to fetch the bitmap to be drawn as the background by wxWidgets
		 *
		 * @return The bitmap to be painted by wxWidgets
		 */
		virtual const wxBitmap& getBitmapToPaint() const = 0;
		/**
		 * This method is used to get a non const version of the bitmap to be able to draw on it
		 *
		 * @return The bitmap to draw on
		 */
		virtual wxBitmap& getBitmapToDraw() = 0;
};

#endif /* CONTROLLER_H_ */
